//给你一个长度为 n 的整数数组 nums 。 
//
// 考虑 nums 中进行 按位与（bitwise AND）运算得到的值 最大 的 非空 子数组。 
//
// 
// 换句话说，令 k 是 nums 任意 子数组执行按位与运算所能得到的最大值。那么，只需要考虑那些执行一次按位与运算后等于 k 的子数组。 
// 
//
// 返回满足要求的 最长 子数组的长度。 
//
// 数组的按位与就是对数组中的所有数字进行按位与运算。 
//
// 子数组 是数组中的一个连续元素序列。 
//
// 
//
// 示例 1： 
//
// 
//输入：nums = [1,2,3,3,2,2]
//输出：2
//解释：
//子数组按位与运算的最大值是 3 。
//能得到此结果的最长子数组是 [3,3]，所以返回 2 。
// 
//
// 示例 2： 
//
// 
//输入：nums = [1,2,3,4]
//输出：1
//解释：
//子数组按位与运算的最大值是 4 。 
//能得到此结果的最长子数组是 [4]，所以返回 1 。
// 
//
// 
//
// 提示： 
//
// 
// 1 <= nums.length <= 10⁵ 
// 1 <= nums[i] <= 10⁶ 
// 
//
// Related Topics 位运算 脑筋急转弯 数组 👍 41 👎 0


package LeetCode.editor.cn;


/**
 * @author ldltd
 * @date 2025-07-30 17:47:21
 * @description 2419.按位与最大的最长子数组
 
 */
 
public class LongestSubarrayWithMaximumBitwiseAnd {
    public static void main(String[] args) {
    //测试代码
    LongestSubarrayWithMaximumBitwiseAnd fun = new LongestSubarrayWithMaximumBitwiseAnd();
    Solution solution= fun.new Solution();
    
    }

//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
        //每一位上都是1则最大，不求子数组长，但求这个数二进制的1最长
    //直接取这个数组中最大的值的最大连续长度即可
    public int longestSubarray1(int[] nums) {
        if (nums == null || nums.length == 0) {
            return 0;
        }

        int max = Integer.MIN_VALUE;
        int currentLength = 0;
        int maxLength = 0;

        // 首先找出数组中的最大值
        for (int num : nums) {
            if (num > max) {
                max = num;
            }
        }

        // 然后计算连续最大值的最长子数组长度
        for (int num : nums) {
            if (num == max) {
                currentLength++;
                maxLength = Math.max(maxLength, currentLength);
            } else {
                currentLength = 0;
            }
        }

        return maxLength;
    }
    public int longestSubarray(int[] nums) {
        int max=-1,res=0,t=0;
        for (int num : nums) {
            if(num>max){
                t=1;
                max=num;
                res=1;
            }else if(num==max){
                t++;
                res=Math.max(res,t);
            }else {
                t=0;
            }
        }
        return res;
    }
}
//leetcode submit region end(Prohibit modification and deletion)

}
